package com.yugao.fintech.antelope.base.log;

import com.alibaba.fastjson2.annotation.JSONType;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.*;
import lombok.extern.slf4j.Slf4j;

import java.io.Serializable;
import java.util.Date;

/**
 * 操作日志数据
 * {@code @JsonInclude(JsonInclude.Include.NON_EMPTY) }属性为 空（""） 或者为 NULL 都不序列化
 */
@Getter
@Setter
@Builder
@Slf4j
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JSONType(orders = {"url", "requestData", "responseData", "ip", "httpMethod", "classMethod", "costTime", "title"})
public class OperateLogInfo implements Serializable {
    private static final long serialVersionUID = 1L;

    private String traceId;

    /**
     * 操作人
     */
    private String userName;

    /**
     * 标签, 区分不同的业务
     */
    private String tag;

    /**
     * 操作摘要
     */
    private String summary;

    /**
     * 业务类型
     */
    private String businessType;

    /**
     * 业务类型数组
     */
    private Integer[] businessTypes;

    /**
     * 请求方式, get / post等方式
     */
    private String httpMethod;

    /**
     * 请求方法
     */
    private String classMethod;

    /**
     * 操作类别（0其它 1后台用户 2手机端用户）
     */
    private Integer operatorType;

    /**
     * 请求url
     */
    private String url;

    /**
     * 操作地址
     */
    private String ip;

    /**
     * 请求参数
     */
    private String requestData;

    /**
     * 返回参数
     */
    private String responseData;

    /**
     * 操作状态（0正常 1异常）
     */
    private Integer status;

    /**
     * 错误消息
     */
    private String errorMsg;

    /**
     * 耗时单位是ms
     */
    private Long costTime;

    /**
     * 操作时间
     */
    private Date createdAt;

    private Long tenantId;
}
